#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 5;
const int inv2 = (mod + 1) >> 1;
int n, m, x;
char ss[maxn];
int a[maxn];
int qpow(int x, ll y){
    int res = 1;
    while(y){
	if(y & 1) res = 1ll * res * x % mod;
	x = 1ll * x * x % mod; y >>= 1;
    }
    return res;
}
int ans = 0;
int sq(int x){
    return 1ll * (x + mod - 1) * inv2 % mod;
}
void upd(int &x, int y){
    return x = x + y >= mod ? x + y - mod : x + y, void();
}
int main(){
    freopen("pearl.in", "r", stdin);
    freopen("pearl.out", "w", stdout);
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> m >> x;
    cin >> ss;
    for(int i = 0;i < m;i++){
	a[i] = ss[i] - '0';
	// cerr << a[i] << endl;
    }
    bool idx = (x & 1); int num = (n + idx) >> 1; int ml = 1;
    for(int i = 0;i < m;i++){
	bool fl = a[i];
	upd(ans, 1ll * (qpow(2, num - 1) + mod - 1) * ml % mod * sq(qpow(2, m - i)) % mod *
	    qpow(2, 1ll * m * (n - num) + 1ll * (m - i - 1) * (num - 1)) % mod);
	// cerr << ans << endl;
	if(fl == 1){
	    if(idx == 0 || idx != (n & 1)){
		upd(ans, 1ll * ml * sq(qpow(2, m - i)) % mod *
		    qpow(2, 1ll * m * (n - num) + 1ll * (m - i - 1) * (num - 1)) % mod);
		// cerr << ans << endl;
	    } else {
		// cerr << "ok " << ans << endl;
		int n0 = n - num;
		for(int j = 0;i + j < m;j++){
		    ml = 2ll * ml % mod;
		    upd(ans, 1ll * (qpow(2, n0) + mod - 1) * ml % mod * sq(qpow(2, m - i - j - 1)) % mod *
			qpow(2, 1ll * n0 * (m - j - 1) + 1ll * (num - 1) * (m - i - 1)) % mod);
		}
	    }
	    break;
	}
	ml = 2ll * ml % mod;
    }
    cout << ans << endl;
    return 0;
}
